﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CLab.Base;
using CLab.Common.View.Utils.Extensions;
using System.Collections;
using System.Data;
using GandA.Component.Log;

namespace CLab.PagAdminLab
{
    public partial class ConsultaResultados : PageBase
    {
        #region Eventos
        protected void Page_Init(object sender, EventArgs e)
        {
            IdItem = 3;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Page.IsPostBack)
                {
                    InicializaPage();
                    LlenarCombo();
                }
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: Page_Load");
                Master.alert(ex.Message);
            }
        }

        protected void Page_LoadComplete()
        {
            if (!Page.IsPostBack)
            {
                txtFolio.ControlTextBox.Focus();
            }
        }

        protected void BtnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                CargaGrid();
                if (gridResultados.Rows.Count == 0)
                {
                    Master.alertSinDatos();
                }

                SetFocus(txtFolio);
            }
            catch (Exception ex)
            {
                Master.alert(ex.Message);
            }
        }

        protected void btnExportar_Click(object sender, EventArgs e)
        {
            try
            {
                if (gridResultados.Rows.Count > 0)
                {
                    gridResultados.AllowPaging = false;
                    CargaGrid();
                    gridResultados.ToExportCsv();
                    gridResultados.AllowPaging = true;
                }
            }
            catch (Exception ex)
            {
                Master.alert(ex.Message);
            }
        }

        protected void gridResultados_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                string[] sParams;
                switch (e.CommandName)
                {
                    case "cmdCancelar":
                        sParams = e.CommandArgument.ToString().Split(',');
                        CancelarRecibo(Common.Util.Convert.ToInt(sParams[0]));
                        BtnBuscar_Click(null, null);
                        break;
                    case "cmdReimprimir":
                        sParams = e.CommandArgument.ToString().Split(',');
                        ReimprimirRecibo(Common.Util.Convert.ToInt(sParams[0]));
                        break;
                    case "cmdCapturar":
                        sParams = e.CommandArgument.ToString().Split(',');
                        SaveFilters();
                        Response.Redirect("CapturaEstudio.aspx?IdResultado=" + sParams[0] + "&IdRecibo=" + sParams[1], false);
                        break;
                }
            }
            catch (Exception ex)
            {
                Master.alert(ex.Message);
            }
        }

        protected void gridResultados_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                gridResultados.PageIndex = e.NewPageIndex;
                CargaGrid();
            }
            catch (Exception ex)
            {
                Master.alert(ex.Message);
            }
        }
        #endregion

        #region Metodos
        private void InicializaPage()
        {
            Master.TituloPagina = "Resultados";
        }

        private void CargaGrid()
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            parametros.Add(CreaParametroConsulta("@pnIdRecibo", Common.Util.Convert.ToNInt(txtFolio.Text.Trim()), ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@pnIdPaciente", Common.Util.Convert.ToNInt(cmbPaciente.SelectedValue), ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@ptFechaIni", Common.Util.Convert.ToNDateTime(dpFechaIni.Text), ConsultaServiceReference.Parameter.vEnumType.Date));
            parametros.Add(CreaParametroConsulta("@ptFechaFin", Common.Util.Convert.ToNDateTime(dpFechaFin.Text), ConsultaServiceReference.Parameter.vEnumType.Date));
            parametros.Add(CreaParametroConsulta("@pnIdLaboratorio", SessionLaboratorio.IdLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@pnIdSucursal", SessionLaboratorio.IdSucursal, ConsultaServiceReference.Parameter.vEnumType.Int));
            ConsultaServiceReference.Parameter[] prms = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(prms);
            //Ejecuta conulta
            DataSet ds = servicio.EjecutaConsultaConParametros("spObtenResultados", prms);
            gridResultados.DataSource = ds;
            gridResultados.DataBind();
        }

        private void LlenarCombo()
        {
            cmbPaciente.ObtenPacientes(SessionLaboratorio.IdLaboratorio, false, true);
        }

        private void CancelarRecibo(int idRecibo)
        {
            // Cancelo el recibo
            RecepcionServiceReference.RecepcionServiceClient srv = new RecepcionServiceReference.RecepcionServiceClient();
            RecepcionServiceReference.Recibo obj = new RecepcionServiceReference.Recibo();
            obj.IdRecibo = idRecibo;
            obj.IdLaboratorio = SessionLaboratorio.IdLaboratorio;
            obj.IdSucursal = SessionLaboratorio.IdSucursal;
            obj.IdUsuarioMod = SessionUsuario.IdUsuario;
            obj.IpMod = Request.UserHostAddress;
            srv.CancelaRecibo(obj);
        }

        private void ReimprimirRecibo(int idRecibo)
        {
            ReportName = ObtenConfiguracion(2).Valor1.ToString();
            ReportDataSorce = ObtenRecibo(idRecibo);
            ScriptManager.RegisterClientScriptBlock(gridResultados, typeof(Page), "js", "Imprimir();", true);
        }

        private DataTable ObtenRecibo(int idRecibo)
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient srv = new ConsultaServiceReference.ConsultaServiceClient();

            //Parámetros
            parametros.Add(CreaParametroConsulta("@pnRecibo", idRecibo, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@pnIdLaboratorio", SessionLaboratorio.IdLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@pnIdSucursal", SessionLaboratorio.IdSucursal, ConsultaServiceReference.Parameter.vEnumType.Int));

            ConsultaServiceReference.Parameter[] prms = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(prms);

            return srv.EjecutaConsultaConParametros("spReporteRecibo", prms).Tables[0];
        }

        #endregion

        protected void gridResultados_Sorting(object sender, GridViewSortEventArgs e)
        {

        }
    }
}